// 第一题：
// 函数柯里化
// 柯里化通常也被称为部分求值，其含义是给函数分布传递参数
// 每次传递参数进行处理，并返回一个更具体 的函数接受剩余的参数
// 这中间可以嵌套多层这样的接受部分参数函数，直至返回最后的结果


// 请实现下面功能的函数

// curring(sumFn)(1)(2)(3)(); // 6
// curring(sumFn)(1, 2)(3, 4)(5)(); // 15
// curring(sumFn)(1,)(2, 3, 4, 5)(6)(); // 21


let sumFn = function(...ags) {
    console.log('okkk:', ags);
    return ags.reduce((p, n) => p + n, 0)
};
// console.log('sumFn:', sumFn(1, 3, 8));

function curring(fn) {
    let params = [];
    return function inFn(...ags) {
        if (ags.length === 0) {
            return fn(...params);
        } else {
            params = [...params, ...ags];
            return inFn
        }
    }
};

console.log('curring(fn)=>', curring(sumFn)(1, 2)(5)(2, 5, 32)())


